package com.ply.service;

import com.ply.entity.pojo.Project;
import com.ply.entity.pojo.User;
import com.ply.entity.vo.ConsumerMsg;
import com.ply.entity.vo.ProjectAndOption;
import com.ply.entity.vo.Result;

import java.util.List;

/**
 * @author XiaoPan
 * date: 2022/1/4 21:37
 * <p>
 * action: 用户的业务逻辑
 */
public interface UserService {

//    发起投票 ()  查询剩余投票次数   增加时间 需充值 可以指定一个投票人 一天投n票
//Result sendVote(int id);
//    充值

    //            升级
//    查询剩余投票次数( 通过等级查询次数 - 投票记录)
//    查询投票记录
//    查询自己的投票  ()
    Result login(String name, String pwd);


    /**
     * 注册
     *
     * @param user 用户实体类
     * @return 成功与否
     */

    Result register(User user);


    /**
     * 发起投票  发起投票 ()  查询剩余投票次数   增加时间 需充值 可以指定一个投票人 一天投n票
     *
     * @return 发起投票成功与否  还会有审核的
     */
    Result sendVote(ProjectAndOption projectAndOption);


    /**
     * 会员充值
     *
     * @param userId  用户id
//     * @param levelId 等级id
     * @param amount  充值的金额
     * @return 是否成功
     */
    Result recharge(int userId, double amount);


    /**
     * 消费方法
     *
     * @param userId         用户id
     * @param amount         金额
     * @param consumerMsg    消费类型
     * @param dayOrVoteCount 天数或者是发起投票次数
     * @return
     */
    Result shopping(int userId, double amount, ConsumerMsg consumerMsg, int dayOrVoteCount,Integer projectId);

    /**
     * 增加总金额
     *
     * @param userId 用户id
     * @param amount 增加的总金额
     */
    Result addAccount(int userId, double amount);


    /**
     * 用户余额变化 充值会调用 消费会调用
     *
     * @param id     用户id
     * @param amount 余额变化量
     * @return 成功失败
     */
    //更新 user表中
    Result addRemainMoney(int id, double amount);


    /**
     * 增加用户充值的总金额
     *
     * @param id     用户id
     * @param amount 用户增加的金额
     * @return
     */

    Result addChargeTotalAmount(int id, double amount);

    /**
     * 说明 : 将剩余投票数 增加
     *
     * @param id 用户id
     * @return 成功与否
     */
    Result addRemainVote(int id, int sum);


    /**
     * 说明 : 将剩余投票数 减一
     *
     * @param userId 用户id
     * @return 成功与否
     */

    Result decSendVote(int userId, int remainVoteSum);


    /**
     * 判断用户是否可以升级
     *
     * @param levelId 等级id
     * @return 返回成功是否
     */
     Result up(int userId, int levelId);



    /**
     * 消费记录
     *
     * @param userId 用户id
     * @param amount 金额
     * @param msg    用途
     */
     Result consumption(int userId, double amount, ConsumerMsg msg, int dayOrVoteCount,Integer projectId);

    /**
     * 查询等级 通过用户 id
     *
     * @param id 用户id
     * @return 用户等级
     */
     int queryLevelByUserId(int id);


}